文章目录
  1. 1. 背景
  2. 2. 思路
    1. 2.1. 获取git项目的URL
    2. 2.2. 获取svn项目的URL
    3. 2.3. 开始编码
      1. 2.3.1. 小技巧
    4. 2.4. 循环遍历文件夹
    5. 2.5. 写入日志

背景


电脑中收藏的开源项目太多,svn、git托管的都用,在系统目录中保存,近期电脑硬盘不够用,打算将这些项目的源代码删除,只保留开源地址记录。

思路

依次遍历目录下的子目录,判断其是否是用版本管理软件管理的代码文件夹,如果是则将该项目名称及开源URL保存到日志文件中。

获取git项目的URL

通过查看git help文档可知,在仓库目录下执行‘git remote -v’可以获取当前仓库的远程地址。

获取svn项目的URL

svn的服务器URL可以通过‘svn info’查看

开始编码

近期在学习python,故打算用python实现
python中的subprocess可以很方便的调用系统命令,输出内容也可以直接处理,参考代码如下:

[获取git remote地址 ]
1
2
3
4
5
6
def giturl(dir):
os.chdir(dir)
cmd = "git remote -v"
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
url = p.stdout.readlines()[0].split(' ')[0]
return str(url).rstrip()

[获取svn remote地址 ]
1
2
3
4
5
6
def svnurl(dir):
os.chdir(dir)
cmd = 'svn info | find "http"'
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
url = p.stdout.readlines()[0].replace('URL:','')
return str(url).rstrip()

小技巧

svn及git仓库目录下都有一个隐藏文件夹,分别是“.svn”、”.git”,通过判断是否含有该目录可以快速的区分是否是代码仓库。

循环遍历文件夹

[用python就是这么简单。]
1
os.listdir(dir);

写入日志

因为打算将目录下所有的仓库地址保存到一个文件,所以要用追加的方式写入日志文件。

[格式化字符串]
1
2
3
4
5
6
7
8
9
def writeitem(dir):
item =svngit(dir)
if item and item.find('http')>0:
item = '%-40s %2s' %(dir, item)
print item
log = open('../svn-git.log', 'a+')
log.write(item+'\r')
log.close()
pass

这里每遍历一个文件夹写入一条记录,也可以在遍历所有文件夹完成后再把结果一次写入,这样效率可能更快,我偷懒了。:)

文章目录
  1. 1. 背景
  2. 2. 思路
    1. 2.1. 获取git项目的URL
    2. 2.2. 获取svn项目的URL
    3. 2.3. 开始编码
      1. 2.3.1. 小技巧
    4. 2.4. 循环遍历文件夹
    5. 2.5. 写入日志